#Libraries
library(tidyverse)
library(readxl)
library(modelr)
library(sjstats)
library(car)
#Files
volumes_file <- "~/Desktop/ELS/income_TBM/data/final_data/inr_volumes_20190218.xlsx"
age_match_ids_file <- "~/Desktop/ELS/income_TBM/data/final_data/age_matched_ids.csv"

Read in data

vols <-
  read_xlsx(volumes_file, sheet = "CSX Volumes") %>% 
  rename(
    pos_rSTG_cs = Pos_10, #superior temporal gyrus
    pos_lIFG_cs = Pos_11, #inferior frontal gyrus
    pos_lLOC_cs = Pos_12, #lateral occipital gyrus
    pos_rMFG_cs = Pos_14, #middle frontal gyrus
    pos_rSFG_cs_dlPFC = Pos_15, #superior frontal gyrus
    pos_rPCG = Pos_16, #postcentral gyrus,
    pos_rSFG_cs_motor = Pos_17,
    pos_rPTR_cs = Pos_18, #posterior thalamic radiation,
    pos_rMB_cs = Pos_19, #midbrain,
    pos_rCV_cs = Pos_20, #cerebellar vermis,
    neg_FG_cs = Neg_7, #fusiform gyrus,
    neg_lThal_cs = Neg_8, #thalamus
    neg_rHipp_cs = Neg_9, #hippocampus/CGH
    neg_lHipp_cs = Neg_10, #hippocampus/CGH/fusiform gyrus,
    neg_rThal_cs = Neg_11, #thalamus
    neg_lAG_cs = Neg_12 #angular gyrus
  ) %>% 
  left_join(
    read_xlsx(volumes_file, sheet = "Long Volumes") %>% 
      rename(
        pos_rSPL_lg = Pos_4, #superior parietal lobule
        pos_rLG_lg = Pos_5, #lingual gyrus,
        pos_lITG_lg = Pos_6, #inferior temporal gyrus,
        pos_lLG_lg = Pos_7, #lingual gyrus,
        neg_rHipp_lg = Neg_7, #hippcampus/CGH,
        neg_lSLF_lg = Neg_8, #superior longitudinal fasciculus,
        neg_lSFG_lg = Neg_9, #superior frontal gyrus
        neg_rSFG_lg = Neg_10, #superior frontal gyrus
        neg_lCerebel_lg = Neg_11, #cerebellum
        neg_rPTR_lg = Neg_12 #posterior thalamic radiation
      ) %>% 
      select(-T1_ICV, -T1_Age, -White, -INR_Sex, -Sex, -INR),
    by = "Subject"
  ) %>% 
  rename(ID = Subject) %>% 
  mutate(Male = as.factor(Sex)) %>% 
  left_join(
    read_csv(age_match_ids_file) %>% 
      rename(
        ID = ELS_ID
      ) %>% 
      mutate(
        age_matched = 1
      ),
      by = "ID"
  )

-
/
                                                                                                  

-
/
                                                                                                  
Parsed with column specification:
cols(
  ELS_ID = col_double()
)
vols_match <-
  vols %>% 
  filter(age_matched == 1)

Cross-sectional simple effect regressions

contrasts(vols_match$Male) = c(1, 0)
#SE male
lm1Ma <- lm(pos_rCV_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm1Ma)

Call:
lm(formula = pos_rCV_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.16663 -0.05848 -0.02213  0.05670  0.19117 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -1.5339084  1.7176767  -0.893  0.37650   
sqrt(INR)        0.4495654  0.1330512   3.379  0.00149 **
Male1            0.5666757  0.2163699   2.619  0.01190 * 
T1_Age           0.0699678  0.0567636   1.233  0.22398   
White            0.0196378  0.0303167   0.648  0.52036   
T1_ICV           0.0002547  0.0011223   0.227  0.82150   
sqrt(INR):Male1 -0.5140601  0.2048626  -2.509  0.01568 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1026 on 46 degrees of freedom
Multiple R-squared:  0.2274,    Adjusted R-squared:  0.1267 
F-statistic: 2.257 on 6 and 46 DF,  p-value: 0.05426
std_beta(lm1Ma)
summary(lm2M)

Call:
lm(formula = pos_rMB_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.38276 -0.08212 -0.00292  0.08828  0.30981 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      0.4634134  0.9866559   0.470 0.639314    
sqrt(INR)        0.3313063  0.1233348   2.686 0.008101 ** 
Male1            0.5777801  0.1554662   3.716 0.000291 ***
T1_Age           0.0153109  0.0105009   1.458 0.147064    
White           -0.0400713  0.0209360  -1.914 0.057662 .  
T1_ICV          -0.0008724  0.0007268  -1.200 0.232055    
sqrt(INR):Male1 -0.5123634  0.1473558  -3.477 0.000676 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1237 on 140 degrees of freedom
Multiple R-squared:  0.1445,    Adjusted R-squared:  0.1079 
F-statistic: 3.942 on 6 and 140 DF,  p-value: 0.001131
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm2Ma <- lm(pos_rMB_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm2Ma)

Call:
lm(formula = pos_rMB_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.34515 -0.06850  0.02252  0.06030  0.27792 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      3.999029   2.139785   1.869   0.0680 .
sqrt(INR)        0.246811   0.165748   1.489   0.1433  
Male1            0.527849   0.269542   1.958   0.0563 .
T1_Age          -0.090490   0.070713  -1.280   0.2071  
White           -0.079966   0.037767  -2.117   0.0397 *
T1_ICV          -0.002538   0.001398  -1.815   0.0761 .
sqrt(INR):Male1 -0.449680   0.255206  -1.762   0.0847 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1278 on 46 degrees of freedom
Multiple R-squared:  0.2784,    Adjusted R-squared:  0.1843 
F-statistic: 2.958 on 6 and 46 DF,  p-value: 0.01584
std_beta(lm2Ma)
outlierTest(lm3F) 
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm3Ma <- lm(pos_rPTR_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm3Ma)

Call:
lm(formula = pos_rPTR_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.218653 -0.070921  0.000017  0.063801  0.237211 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -1.6772470  2.0470563  -0.819  0.41681   
sqrt(INR)        0.4601431  0.1585650   2.902  0.00567 **
Male1            0.7491131  0.2578608   2.905  0.00563 **
T1_Age           0.0447676  0.0676486   0.662  0.51142   
White           -0.0174304  0.0361302  -0.482  0.63179   
T1_ICV           0.0005576  0.0013375   0.417  0.67873   
sqrt(INR):Male1 -0.6152283  0.2441468  -2.520  0.01527 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1222 on 46 degrees of freedom
Multiple R-squared:  0.3139,    Adjusted R-squared:  0.2244 
F-statistic: 3.507 on 6 and 46 DF,  p-value: 0.006116
std_beta(lm3Ma)
outlierTest(lm4F) 
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm4Ma <- lm(pos_rSFG_cs_motor ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm4Ma)

Call:
lm(formula = pos_rSFG_cs_motor ~ sqrt(INR) * Male + T1_Age + 
    White + T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.34653 -0.09981  0.00572  0.09935  0.35439 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -1.996834   2.630089  -0.759  0.45159   
sqrt(INR)        0.419811   0.203727   2.061  0.04502 * 
Male1            0.952567   0.331303   2.875  0.00610 **
T1_Age           0.025999   0.086916   0.299  0.76619   
White           -0.045970   0.046421  -0.990  0.32721   
T1_ICV           0.000800   0.001718   0.466  0.64374   
sqrt(INR):Male1 -0.957334   0.313684  -3.052  0.00377 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1571 on 46 degrees of freedom
Multiple R-squared:  0.2228,    Adjusted R-squared:  0.1215 
F-statistic: 2.198 on 6 and 46 DF,  p-value: 0.06014
std_beta(lm4Ma)
outlierTest(lm5F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm5Ma <- lm(pos_rPCG ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm5Ma)

Call:
lm(formula = pos_rPCG ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, 
    data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.24765 -0.12809  0.01160  0.08905  0.36692 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)      1.5665622  2.6098063   0.600   0.5513  
sqrt(INR)        0.4621886  0.2021556   2.286   0.0269 *
Male1            0.5792700  0.3287485   1.762   0.0847 .
T1_Age          -0.1065636  0.0862456  -1.236   0.2229  
White           -0.0531768  0.0460626  -1.154   0.2543  
T1_ICV          -0.0005821  0.0017052  -0.341   0.7344  
sqrt(INR):Male1 -0.5274940  0.3112645  -1.695   0.0969 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1558 on 46 degrees of freedom
Multiple R-squared:  0.1929,    Adjusted R-squared:  0.08764 
F-statistic: 1.832 on 6 and 46 DF,  p-value: 0.1136
std_beta(lm5Ma)
outlierTest(lm6F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm6Ma <- lm(pos_rSFG_cs_dlPFC ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm6Ma)

Call:
lm(formula = pos_rSFG_cs_dlPFC ~ sqrt(INR) * Male + T1_Age + 
    White + T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.30245 -0.12260 -0.00053  0.13019  0.37256 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)      0.976568   2.935849   0.333  0.74092   
sqrt(INR)        0.646413   0.227411   2.842  0.00665 **
Male1            0.664792   0.369819   1.798  0.07880 . 
T1_Age           0.055335   0.097020   0.570  0.57122   
White            0.011561   0.051817   0.223  0.82444   
T1_ICV          -0.001726   0.001918  -0.900  0.37294   
sqrt(INR):Male1 -0.631426   0.350151  -1.803  0.07789 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1753 on 46 degrees of freedom
Multiple R-squared:  0.1795,    Adjusted R-squared:  0.07246 
F-statistic: 1.677 on 6 and 46 DF,  p-value: 0.1482
std_beta(lm6Ma)
outlierTest(lm7F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm7Ma <- lm(pos_rMFG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm7Ma)

Call:
lm(formula = pos_rMFG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.35292 -0.11674 -0.00352  0.11356  0.30581 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.463282   2.922855   0.159   0.8748  
sqrt(INR)        0.512866   0.226404   2.265   0.0282 *
Male1            0.695032   0.368182   1.888   0.0654 .
T1_Age           0.106856   0.096591   1.106   0.2744  
White           -0.013195   0.051588  -0.256   0.7993  
T1_ICV          -0.001703   0.001910  -0.892   0.3772  
sqrt(INR):Male1 -0.651147   0.348601  -1.868   0.0682 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1745 on 46 degrees of freedom
Multiple R-squared:  0.1375,    Adjusted R-squared:  0.02503 
F-statistic: 1.222 on 6 and 46 DF,  p-value: 0.3123
std_beta(lm7Ma)
outlierTest(lm8M)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm8Ma <- lm(pos_lLOC_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm8Ma)

Call:
lm(formula = pos_lLOC_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.24193 -0.08647 -0.02296  0.09096  0.28634 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)     -0.150520   2.216343  -0.068    0.946  
sqrt(INR)        0.312772   0.171678   1.822    0.075 .
Male1            0.405342   0.279185   1.452    0.153  
T1_Age          -0.066246   0.073243  -0.904    0.370  
White           -0.009608   0.039118  -0.246    0.807  
T1_ICV           0.000470   0.001448   0.325    0.747  
sqrt(INR):Male1 -0.426981   0.264337  -1.615    0.113  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1323 on 46 degrees of freedom
Multiple R-squared:  0.1322,    Adjusted R-squared:  0.01897 
F-statistic: 1.168 on 6 and 46 DF,  p-value: 0.34
std_beta(lm8Ma)
contrasts(vols$Male) = c(0, 1)
# SE female
lm9F <- lm(pos_lIFG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols)
summary(lm9F)

Call:
lm(formula = pos_lIFG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.56310 -0.13836  0.01717  0.14774  0.40807 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.811725   1.591927   1.138 0.257035    
sqrt(INR)       -0.283084   0.130205  -2.174 0.031376 *  
Male1           -0.874929   0.250265  -3.496 0.000633 ***
T1_Age          -0.013186   0.016904  -0.780 0.436678    
White            0.056685   0.033702   1.682 0.094808 .  
T1_ICV          -0.001107   0.001170  -0.947 0.345508    
sqrt(INR):Male1  0.823775   0.237209   3.473 0.000686 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1992 on 140 degrees of freedom
Multiple R-squared:  0.09682,   Adjusted R-squared:  0.05812 
F-statistic: 2.501 on 6 and 140 DF,  p-value: 0.02492
std_beta(lm9F)
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm9Ma <- lm(pos_lIFG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm9Ma)

Call:
lm(formula = pos_lIFG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.3695 -0.1374 -0.0204  0.1234  0.3647 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)      3.258397   2.991726   1.089  0.28177   
sqrt(INR)        0.629328   0.231739   2.716  0.00929 **
Male1            1.122858   0.376858   2.980  0.00460 **
T1_Age           0.023964   0.098867   0.242  0.80956   
White            0.046655   0.052803   0.884  0.38152   
T1_ICV          -0.003203   0.001955  -1.638  0.10816   
sqrt(INR):Male1 -1.036832   0.356815  -2.906  0.00562 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1787 on 46 degrees of freedom
Multiple R-squared:  0.2405,    Adjusted R-squared:  0.1414 
F-statistic: 2.428 on 6 and 46 DF,  p-value: 0.04021
std_beta(lm9Ma)
outlierTest(lm10F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm10Ma <- lm(pos_rSTG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm10Ma)

Call:
lm(formula = pos_rSTG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.36278 -0.10451  0.00383  0.10380  0.37672 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)      0.0478521  2.9143570   0.016   0.9870   
sqrt(INR)        0.6657509  0.2257461   2.949   0.0050 **
Male1            0.8892313  0.3671117   2.422   0.0194 * 
T1_Age          -0.1136426  0.0963101  -1.180   0.2441   
White           -0.0878571  0.0514379  -1.708   0.0944 . 
T1_ICV           0.0003022  0.0019042   0.159   0.8746   
sqrt(INR):Male1 -0.7758651  0.3475874  -2.232   0.0305 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.174 on 46 degrees of freedom
Multiple R-squared:  0.2978,    Adjusted R-squared:  0.2063 
F-statistic: 3.252 on 6 and 46 DF,  p-value: 0.009498
std_beta(lm10Ma)
outlierTest(lm11F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm11Ma <- lm(neg_lAG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm11Ma)

Call:
lm(formula = neg_lAG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.29983 -0.09409 -0.01208  0.07789  0.32190 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
(Intercept)     -0.2389498  2.3780439  -0.100    0.920
sqrt(INR)       -0.1232605  0.1842033  -0.669    0.507
Male1           -0.1439166  0.2995542  -0.480    0.633
T1_Age           0.0467741  0.0785866   0.595    0.555
White           -0.0581777  0.0419721  -1.386    0.172
T1_ICV          -0.0001192  0.0015538  -0.077    0.939
sqrt(INR):Male1  0.0465088  0.2836228   0.164    0.870

Residual standard error: 0.142 on 46 degrees of freedom
Multiple R-squared:  0.1724,    Adjusted R-squared:  0.06445 
F-statistic: 1.597 on 6 and 46 DF,  p-value: 0.1696
std_beta(lm11Ma)
outlierTest(lm12F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm12Ma <- lm(neg_lThal_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm12Ma)

Call:
lm(formula = neg_lThal_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.33125 -0.06768  0.00319  0.07834  0.19568 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.3294061  1.8121853   0.182   0.8566  
sqrt(INR)       -0.2209442  0.1403719  -1.574   0.1223  
Male1           -0.4484302  0.2282749  -1.964   0.0555 .
T1_Age           0.0345056  0.0598868   0.576   0.5673  
White            0.0491573  0.0319848   1.537   0.1312  
T1_ICV          -0.0003327  0.0011841  -0.281   0.7800  
sqrt(INR):Male1  0.3707231  0.2161344   1.715   0.0930 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1082 on 46 degrees of freedom
Multiple R-squared:  0.2113,    Adjusted R-squared:  0.1084 
F-statistic: 2.054 on 6 and 46 DF,  p-value: 0.0774
std_beta(lm12Ma)
outlierTest(lm13F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm13Ma <- lm(neg_lHipp_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm13Ma)

Call:
lm(formula = neg_lHipp_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.228744 -0.041216 -0.004803  0.043004  0.270573 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -2.761818   1.821483  -1.516  0.13630   
sqrt(INR)       -0.336101   0.141092  -2.382  0.02140 * 
Male1           -0.618514   0.229446  -2.696  0.00978 **
T1_Age          -0.023982   0.060194  -0.398  0.69217   
White            0.045593   0.032149   1.418  0.16288   
T1_ICV           0.002329   0.001190   1.957  0.05648 . 
sqrt(INR):Male1  0.580188   0.217243   2.671  0.01043 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1088 on 46 degrees of freedom
Multiple R-squared:  0.2449,    Adjusted R-squared:  0.1464 
F-statistic: 2.487 on 6 and 46 DF,  p-value: 0.03623
std_beta(lm13Ma)
outlierTest(lm14F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm14Ma <- lm(neg_rHipp_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm14Ma)

Call:
lm(formula = neg_rHipp_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.167577 -0.061443  0.002776  0.061129  0.140605 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -3.9544614  1.3971300  -2.830  0.00687 **
sqrt(INR)       -0.1615196  0.1082217  -1.492  0.14240   
Male1           -0.5417792  0.1759917  -3.078  0.00350 **
T1_Age           0.0329283  0.0461706   0.713  0.47933   
White           -0.0010871  0.0246591  -0.044  0.96503   
T1_ICV           0.0026953  0.0009129   2.953  0.00495 **
sqrt(INR):Male1  0.5072121  0.1666319   3.044  0.00385 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.08343 on 46 degrees of freedom
Multiple R-squared:  0.2859,    Adjusted R-squared:  0.1927 
F-statistic: 3.069 on 6 and 46 DF,  p-value: 0.01305
std_beta(lm14Ma)
outlierTest(lm15F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm15Ma <- lm(neg_lThal_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm15Ma)

Call:
lm(formula = neg_lThal_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.33125 -0.06768  0.00319  0.07834  0.19568 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.3294061  1.8121853   0.182   0.8566  
sqrt(INR)       -0.2209442  0.1403719  -1.574   0.1223  
Male1           -0.4484302  0.2282749  -1.964   0.0555 .
T1_Age           0.0345056  0.0598868   0.576   0.5673  
White            0.0491573  0.0319848   1.537   0.1312  
T1_ICV          -0.0003327  0.0011841  -0.281   0.7800  
sqrt(INR):Male1  0.3707231  0.2161344   1.715   0.0930 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1082 on 46 degrees of freedom
Multiple R-squared:  0.2113,    Adjusted R-squared:  0.1084 
F-statistic: 2.054 on 6 and 46 DF,  p-value: 0.0774
std_beta(lm15Ma)
outlierTest(lm16F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm16Ma <- lm(neg_FG_cs ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm16Ma)

Call:
lm(formula = neg_FG_cs ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.176275 -0.073597  0.006977  0.066086  0.222399 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)      3.939e-01  1.596e+00   0.247   0.8062  
sqrt(INR)       -1.963e-01  1.236e-01  -1.588   0.1192  
Male1           -4.352e-01  2.010e-01  -2.165   0.0357 *
T1_Age          -9.400e-03  5.274e-02  -0.178   0.8593  
White           -2.424e-02  2.817e-02  -0.860   0.3941  
T1_ICV          -8.224e-05  1.043e-03  -0.079   0.9375  
sqrt(INR):Male1  4.144e-01  1.904e-01   2.177   0.0347 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.09531 on 46 degrees of freedom
Multiple R-squared:  0.1066,    Adjusted R-squared:  -0.009973 
F-statistic: 0.9144 on 6 and 46 DF,  p-value: 0.4932
std_beta(lm16Ma)

Longitudinal

outlierTest(lm17F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm17Ma <- lm(pos_lLG_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm17Ma)

Call:
lm(formula = pos_lLG_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.178283 -0.047509 -0.008937  0.029333  0.177946 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)      3.171473   1.926671   1.646  0.11093   
sqrt(INR)        0.442784   0.134101   3.302  0.00263 **
Male1            0.726124   0.256473   2.831  0.00849 **
T1_Age          -0.083784   0.057364  -1.461  0.15527   
White            0.012479   0.032578   0.383  0.70457   
T1_ICV          -0.002017   0.001312  -1.537  0.13558   
sqrt(INR):Male1 -0.660317   0.240825  -2.742  0.01052 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.09086 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.4574,    Adjusted R-squared:  0.3411 
F-statistic: 3.934 on 6 and 28 DF,  p-value: 0.005631
std_beta(lm17Ma)
outlierTest(lm18F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm18Ma <- lm(pos_lITG_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm18Ma)

Call:
lm(formula = pos_lITG_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.18613 -0.07960 -0.01354  0.07937  0.19463 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -1.1134525  2.4061682  -0.463 0.647120    
sqrt(INR)        0.7083473  0.1674754   4.230 0.000226 ***
Male1            0.9299320  0.3203019   2.903 0.007125 ** 
T1_Age          -0.0027093  0.0716409  -0.038 0.970101    
White            0.0321223  0.0406858   0.790 0.436443    
T1_ICV           0.0002795  0.0016391   0.171 0.865837    
sqrt(INR):Male1 -0.8790167  0.3007599  -2.923 0.006796 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1135 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.4209,    Adjusted R-squared:  0.2968 
F-statistic: 3.392 on 6 and 28 DF,  p-value: 0.01216
std_beta(lm18Ma)
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm19Ma <- lm(pos_rLG_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm19Ma)

Call:
lm(formula = pos_rLG_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.209777 -0.022577  0.008025  0.033420  0.130932 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      0.6513438  1.4778256   0.441 0.662782    
sqrt(INR)        0.4051405  0.1028604   3.939 0.000495 ***
Male1            0.0746646  0.1967237   0.380 0.707150    
T1_Age          -0.0286914  0.0440005  -0.652 0.519674    
White            0.0446099  0.0249885   1.785 0.085064 .  
T1_ICV          -0.0005878  0.0010067  -0.584 0.563949    
sqrt(INR):Male1 -0.0847129  0.1847214  -0.459 0.650063    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06969 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.5253,    Adjusted R-squared:  0.4236 
F-statistic: 5.164 on 6 and 28 DF,  p-value: 0.001102
std_beta(lm19Ma)
outlierTest(lm20F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm20Ma <- lm(pos_rSPL_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm20Ma)

Call:
lm(formula = pos_rSPL_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.17477 -0.07169  0.01102  0.05353  0.18477 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)     -2.484343   2.022558  -1.228  0.22955   
sqrt(INR)        0.462011   0.140775   3.282  0.00277 **
Male1            0.641758   0.269237   2.384  0.02416 * 
T1_Age          -0.009015   0.060219  -0.150  0.88208   
White           -0.011287   0.034199  -0.330  0.74384   
T1_ICV           0.001540   0.001378   1.118  0.27308   
sqrt(INR):Male1 -0.569646   0.252810  -2.253  0.03226 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.09538 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.3469,    Adjusted R-squared:  0.2069 
F-statistic: 2.479 on 6 and 28 DF,  p-value: 0.04751
std_beta(lm20Ma)
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm21Ma <- lm(neg_rPTR_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm21Ma)

Call:
lm(formula = neg_rPTR_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.19942 -0.01818 -0.00027  0.01722  0.12794 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.4604586  1.3273173   1.100 0.280568    
sqrt(INR)       -0.3547662  0.0923846  -3.840 0.000644 ***
Male1           -0.6052391  0.1766885  -3.425 0.001913 ** 
T1_Age          -0.0492362  0.0395193  -1.246 0.223134    
White           -0.0004490  0.0224436  -0.020 0.984182    
T1_ICV          -0.0003762  0.0009042  -0.416 0.680566    
sqrt(INR):Male1  0.5601276  0.1659085   3.376 0.002172 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06259 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.4011,    Adjusted R-squared:  0.2728 
F-statistic: 3.125 on 6 and 28 DF,  p-value: 0.01795
std_beta(lm21Ma)
outlierTest(lm22F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm22Ma <- lm(neg_lCerebel_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm22Ma)

Call:
lm(formula = neg_lCerebel_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.10335 -0.02336 -0.00587  0.02449  0.08326 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      5.952e-01  1.052e+00   0.566  0.57593    
sqrt(INR)       -3.672e-01  7.320e-02  -5.016 2.65e-05 ***
Male1           -4.982e-01  1.400e-01  -3.559  0.00135 ** 
T1_Age          -1.214e-02  3.131e-02  -0.388  0.70115    
White           -3.447e-02  1.778e-02  -1.938  0.06275 .  
T1_ICV          -4.535e-05  7.164e-04  -0.063  0.94998    
sqrt(INR):Male1  4.634e-01  1.315e-01   3.525  0.00148 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0496 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.518, Adjusted R-squared:  0.4147 
F-statistic: 5.015 on 6 and 28 DF,  p-value: 0.001331
std_beta(lm22Ma)
outlierTest(lm23F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm23Ma <- lm(neg_rSFG_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm23Ma)

Call:
lm(formula = neg_rSFG_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.262848 -0.045948  0.007162  0.048026  0.226662 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)     -0.9737408  2.2314265  -0.436   0.6659  
sqrt(INR)       -0.3907123  0.1553129  -2.516   0.0179 *
Male1           -0.5187947  0.2970408  -1.747   0.0917 .
T1_Age           0.0911934  0.0664381   1.373   0.1808  
White           -0.0316536  0.0377311  -0.839   0.4086  
T1_ICV           0.0002696  0.0015201   0.177   0.8605  
sqrt(INR):Male1  0.5007620  0.2789180   1.795   0.0834 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1052 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.3116,    Adjusted R-squared:  0.164 
F-statistic: 2.112 on 6 and 28 DF,  p-value: 0.08357
std_beta(lm23Ma)
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm24Ma <- lm(neg_lSFG_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm24Ma)

Call:
lm(formula = neg_lSFG_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.15901 -0.04040  0.01431  0.05354  0.10485 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      2.7951785  1.5365576   1.819  0.07960 .  
sqrt(INR)       -0.5155758  0.1069483  -4.821 4.53e-05 ***
Male1           -0.6778312  0.2045419  -3.314  0.00255 ** 
T1_Age           0.0529327  0.0457492   1.157  0.25704    
White           -0.0002376  0.0259816  -0.009  0.99277    
T1_ICV          -0.0021157  0.0010467  -2.021  0.05290 .  
sqrt(INR):Male1  0.6071040  0.1920626   3.161  0.00376 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.07246 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.5445,    Adjusted R-squared:  0.4469 
F-statistic: 5.579 on 6 and 28 DF,  p-value: 0.0006574
std_beta(lm24Ma)
outlierTest(lm25F)
No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm25Ma <- lm(neg_lSLF_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm25Ma)

Call:
lm(formula = neg_lSLF_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.106059 -0.016623  0.000047  0.032360  0.067213 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      2.174e-01  9.249e-01   0.235 0.815858    
sqrt(INR)       -2.704e-01  6.438e-02  -4.200 0.000245 ***
Male1           -3.747e-01  1.231e-01  -3.043 0.005050 ** 
T1_Age          -1.746e-03  2.754e-02  -0.063 0.949888    
White           -2.153e-02  1.564e-02  -1.376 0.179627    
T1_ICV           7.871e-05  6.301e-04   0.125 0.901476    
sqrt(INR):Male1  3.653e-01  1.156e-01   3.160 0.003767 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.04362 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.4394,    Adjusted R-squared:  0.3193 
F-statistic: 3.658 on 6 and 28 DF,  p-value: 0.008302
std_beta(lm25Ma)
contrasts(vols$Male) = c(1, 0)
#SE male
lm26M <- lm(neg_rHipp_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols)
summary(lm26M)

Call:
lm(formula = neg_rHipp_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.187588 -0.028662 -0.004849  0.034577  0.137558 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.662e-01  5.541e-01   0.300 0.764818    
sqrt(INR)       -2.395e-01  7.220e-02  -3.317 0.001269 ** 
Male1           -3.084e-01  9.393e-02  -3.284 0.001412 ** 
T1_Age           3.351e-03  6.421e-03   0.522 0.602955    
White           -1.613e-02  1.258e-02  -1.282 0.202856    
T1_ICV           3.696e-05  4.107e-04   0.090 0.928473    
sqrt(INR):Male1  3.187e-01  8.866e-02   3.595 0.000506 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06213 on 100 degrees of freedom
  (40 observations deleted due to missingness)
Multiple R-squared:  0.1557,    Adjusted R-squared:  0.1051 
F-statistic: 3.075 on 6 and 100 DF,  p-value: 0.008368
std_beta(lm26M)
contrasts(vols_match$Male) = c(1, 0)
#SE male
lm26Ma <- lm(neg_rHipp_lg ~ sqrt(INR) * Male + T1_Age + White + T1_ICV, data = vols_match)
summary(lm26Ma)

Call:
lm(formula = neg_rHipp_lg ~ sqrt(INR) * Male + T1_Age + White + 
    T1_ICV, data = vols_match)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.12769 -0.02291  0.00175  0.02237  0.13387 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)     -1.0169430  1.2465803  -0.816   0.4215  
sqrt(INR)       -0.2214022  0.0867651  -2.552   0.0165 *
Male1           -0.3683556  0.1659410  -2.220   0.0347 *
T1_Age           0.0061051  0.0371155   0.164   0.8705  
White           -0.0253821  0.0210784  -1.204   0.2386  
T1_ICV           0.0008779  0.0008492   1.034   0.3101  
sqrt(INR):Male1  0.3932683  0.1558168   2.524   0.0176 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.05878 on 28 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.3814,    Adjusted R-squared:  0.2488 
F-statistic: 2.877 on 6 and 28 DF,  p-value: 0.02597
std_beta(lm26Ma)

Residualize all volumes

full sample

residualize_models_cs <-
  vols %>% 
  gather(region, volume, pos_rSTG_cs:neg_lAG_cs) %>% 
  group_by(region) %>% 
  nest() %>% 
  mutate(
    residuals = map(
      data, 
      ~lm(volume ~ T1_ICV + White + T1_Age, data = .)$residuals
    )
  ) %>% 
  unnest() %>% 
  mutate(
    region = as.factor(region)
  )
residualize_models_lg <-
  vols %>% 
  filter(!is.na(pos_rSPL_lg)) %>% 
  gather(region, volume, pos_rSPL_lg:neg_rPTR_lg) %>% 
  group_by(region) %>% 
  nest() %>% 
  mutate(
    residuals = map(
      data, 
      ~lm(volume ~ T1_ICV + White + T1_Age + Interval, data = .)$residuals
    )
  ) %>% 
  unnest() %>% 
  mutate(
    region = as.factor(region)
  )

age matched

residualize_models_cs_agematch <-
  vols_match %>% 
  gather(region, volume, pos_rSTG_cs:neg_lAG_cs) %>% 
  group_by(region) %>% 
  nest() %>% 
  mutate(
    residuals = map(
      data, 
      ~lm(volume ~ T1_ICV + White + T1_Age, data = .)$residuals
    )
  ) %>% 
  unnest() %>% 
  mutate(
    region = as.factor(region)
  )
residualize_models_lg_agematch <-
  vols_match %>% 
  filter(!is.na(pos_rSPL_lg)) %>% 
  gather(region, volume, pos_rSPL_lg:neg_rPTR_lg) %>% 
  group_by(region) %>% 
  nest() %>% 
  mutate(
    residuals = map(
      data, 
      ~lm(volume ~ T1_ICV + White + T1_Age + Interval, data = .)$residuals
    )
  ) %>% 
  unnest() %>% 
  mutate(
    region = as.factor(region)
  )

Visualize

Cross-sectional

residualize_models_cs <-
  residualize_models_cs %>% 
  mutate(
    region_named = factor(
      region,
      levels = c(
        "pos_rCV_cs", 
        "pos_rMB_cs", 
        "pos_rPTR_cs", 
        "pos_rSFG_cs_motor", 
        "pos_rPCG",
        "pos_rSFG_cs_dlPFC",
        "pos_rMFG_cs",
        "pos_lLOC_cs",
        "pos_lIFG_cs",
        "pos_rSTG_cs",
        "neg_lAG_cs",
        "neg_rThal_cs", 
        "neg_lHipp_cs", 
        "neg_rHipp_cs", 
        "neg_lThal_cs", 
        "neg_FG_cs"
      ),
      labels = c(
        "Right CV (3, -47, -35)",
        "Right midbrain (3, -32, -4)",
        "Right PTR (40, -55, 2)",
        "Right SFG (9, -8, 54)",
        "Right PoG (15, -32, 69)",
        "Right SFG (11, 46, 45)",
        "Right MFG (51, 38, 5)",
        "Left LOG (-23, -89, 3)",
        "Left IFG (-48, 46, -8)",
        "Right STG (63, -47, 19)",
        "Left AG (-46, -39, 33)",
        "Right thalamus (13, -23, 8)",
        "Left CGH (-29, -19, -33)",
        "Right CGH (23, -14, -23)",
        "Left thalamus (-9, -24, 10)",
        "Left FG (-49, -49, -16)"
      )
    ),
    Sex = factor(
      Male, 
      levels = c(0, 1),
      labels = c("Female", "Male")
    )
  )
glimpse(residualize_models_cs_agematch)
Observations: 848
Variables: 24
$ region          <fct> pos_rSTG_cs, pos_rSTG_cs, pos_rSTG_cs, pos_rSTG_cs, pos_rSTG_cs, pos_rSTG…
$ residuals       <dbl> -0.029977783, 0.179923920, 0.314162377, 0.035453172, -0.149856670, 0.0996…
$ ID              <dbl> 18, 22, 23, 25, 32, 35, 39, 42, 43, 46, 48, 49, 54, 60, 64, 65, 75, 76, 7…
$ T1_ICV          <dbl> 1352.300, 1317.275, 1359.031, 1347.595, 1327.863, 1339.837, 1338.875, 134…
$ White           <dbl> 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0…
$ T1_Age          <dbl> 11.09, 11.22, 11.94, 11.67, 11.53, 11.74, 11.22, 11.95, 11.70, 11.65, 11.…
$ Sex             <fct> Female, Male, Female, Male, Female, Male, Female, Male, Female, Male, Mal…
$ INR             <dbl> 1.2144654, 1.1273735, 1.0160947, 0.7463322, 1.0160947, 1.4021141, 1.27994…
$ INR_Sex         <dbl> 1.2144654, 2.2547470, 1.0160947, 1.4926645, 1.0160947, 2.8042282, 1.27994…
$ pos_rSPL_lg     <dbl> NA, 0.007105, 0.014721, -0.006227, NA, 0.074150, NA, -0.085309, 0.076353,…
$ pos_rLG_lg      <dbl> NA, 0.011626, -0.095641, -0.064236, NA, 0.044319, NA, 0.021908, -0.063848…
$ pos_lITG_lg     <dbl> NA, 0.096546, 0.092174, -0.192735, NA, -0.061005, NA, 0.274067, -0.080808…
$ pos_lLG_lg      <dbl> NA, 0.027371, -0.100991, 0.026319, NA, 0.135742, NA, -0.001221, -0.140797…
$ neg_rHipp_lg    <dbl> NA, -0.180199, 0.011528, 0.066754, NA, -0.023231, NA, 0.054839, 0.072891,…
$ neg_lSLF_lg     <dbl> NA, -0.025449, 0.029119, 0.103692, NA, -0.113493, NA, -0.045815, 0.046227…
$ neg_lSFG_lg     <dbl> NA, 0.121833, -0.134355, 0.221174, NA, -0.026029, NA, -0.067296, 0.053502…
$ neg_rSFG_lg     <dbl> NA, 0.031358, 0.300343, 0.073874, NA, 0.022223, NA, 0.059198, 0.063420, 0…
$ neg_lCerebel_lg <dbl> NA, -0.041313, -0.006640, 0.018558, NA, -0.146236, NA, -0.078917, 0.02951…
$ neg_rPTR_lg     <dbl> NA, 0.031497, -0.236286, -0.006042, NA, -0.042279, NA, -0.008907, 0.02144…
$ Interval        <dbl> NA, 1.67, 1.88, 1.95, NA, 2.58, NA, 1.82, 1.78, 1.22, 2.49, 1.77, 1.80, 1…
$ Male            <fct> 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0…
$ age_matched     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ volume          <dbl> -0.076392, 0.022881, 0.095106, -0.124102, -0.271639, -0.069962, 0.057077,…
$ region_named    <fct> "Right STG (63, -47, 19)", "Right STG (63, -47, 19)", "Right STG (63, -47…
residualize_models_cs %>% 
  filter(str_detect(region, "neg")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Volume in early adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/neg_cross-sectional.png",
  height = 11,
  width = 13
)

residualize_models_cs_agematch %>% 
  filter(str_detect(region, "neg")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Volume in early adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/neg_cross-sectional_agematch.png",
  height = 11,
  width = 13
)

residualize_models_cs %>% 
  filter(str_detect(region, "pos")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  #scale_x_continuous(breaks = seq.int(0, 2, .2)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Volume in early adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/pos_cross-sectional.png",
  height = 12,
  width = 15.5
)

residualize_models_cs_agematch %>% 
  filter(str_detect(region, "pos")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  #scale_x_continuous(breaks = seq.int(0, 2, .2)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 16),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Volume in early adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/pos_cross-sectional_agematch.png",
  height = 12,
  width = 15.5
)

Longitudinal

residualize_models_lg <-
  residualize_models_lg %>% 
  mutate(
    region_named = factor(
      region,
      levels = c(
        "pos_lLG_lg",
        "pos_lITG_lg",
        "pos_rLG_lg",
        "pos_rSPL_lg",
        "neg_rPTR_lg",
        "neg_lCerebel_lg",
        "neg_rSFG_lg",
        "neg_lSFG_lg",
        "neg_lSLF_lg",
        "neg_rHipp_lg"
      ),
      labels = c(
        "Left LG (-20, -75, -5)",
        "Left ITG (-48, 1, -40)",
        "Right LG (12, -73, -9)",
        "R SPL (27, -60, 56)",
        "Right PTR (24, -70, 7)",
        "Left cerebellum (-18, -66, -21)",
        "Right SFG (17, -5, 58)",
        "Left SFG (-16, 62, -10)",
        "Left SLF (-33, -44, 16)",
        "Right CGH (26, -33, -7)"
      )
    ),
    Sex = factor(
      Male, 
      levels = c(0, 1),
      labels = c("Female", "Male")
    )
  ) 
residualize_models_lg_agematch <-
  residualize_models_lg_agematch %>% 
  mutate(
    region_named = factor(
      region,
      levels = c(
        "pos_lLG_lg",
        "pos_lITG_lg",
        "pos_rLG_lg",
        "pos_rSPL_lg",
        "neg_rPTR_lg",
        "neg_lCerebel_lg",
        "neg_rSFG_lg",
        "neg_lSFG_lg",
        "neg_lSLF_lg",
        "neg_rHipp_lg"
      ),
      labels = c(
        "Left LG (-20, -75, -5)",
        "Left ITG (-48, 1, -40)",
        "Right LG (12, -73, -9)",
        "R SPL (27, -60, 56)",
        "Right PTR (24, -70, 7)",
        "Left cerebellum (-18, -66, -21)",
        "Right SFG (17, -5, 58)",
        "Left SFG (-16, 62, -10)",
        "Left SLF (-33, -44, 16)",
        "Right CGH (26, -33, -7)"
      )
    ),
    Sex = factor(
      Male, 
      levels = c(0, 1),
      labels = c("Female", "Male")
    )
  ) 
residualize_models_lg %>% 
  filter(str_detect(region, "neg")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Change in volume from earlier to later adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/neg_longitudinal.png",
  height = 11,
  width = 13
)

residualize_models_lg_agematch %>% 
  filter(str_detect(region, "neg")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Change in volume from earlier to later adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/neg_longitudinal_agematch.png",
  height = 11,
  width = 13
)

residualize_models_lg %>% 
  filter(str_detect(region, "pos")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Change in volume from earlier to later adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/pos_longitudinal.png",
  height = 11,
  width = 13
)

residualize_models_lg_agematch %>% 
  filter(str_detect(region, "pos")) %>% 
  ggplot(aes(INR, residuals, color = Sex, fill = Sex)) +
  geom_point(size = 3, alpha = 1/2) +
  geom_smooth(method = "lm", formula = y ~ sqrt(x), size = 2) +
  scale_x_continuous(breaks = seq.int(0, 2, .25)) +
  scale_color_manual(
    values = c("darkred", "royalblue4")
  ) +
  scale_fill_manual(
    values = c("darkred", "royalblue4")
  ) +
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title = element_text(size = 24),
    axis.text = element_text(size = 18),
    legend.text = element_text(size = 22),
    strip.text = element_text(size = 18),
    legend.key.size = unit(2, 'lines')
  ) +
  facet_wrap(.~region_named) +
  labs(
    y = "Change in volume from earlier to later adolescence\n(residuals)",
    x = "Family income-to-needs ratio"
  )
ggsave(
  "~/Desktop/ELS/income_TBM/income_TBM_sync/plots/pos_longitudinal_agematch.png",
  height = 11,
  width = 13
)

LS0tCnRpdGxlOiAiUHJvYmUgc2V4ICogSU5SIGludGVyYWN0aW9ucyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CiNMaWJyYXJpZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KG1vZGVscikKbGlicmFyeShzanN0YXRzKQpsaWJyYXJ5KGNhcikKCiNGaWxlcwp2b2x1bWVzX2ZpbGUgPC0gIn4vRGVza3RvcC9FTFMvaW5jb21lX1RCTS9kYXRhL2ZpbmFsX2RhdGEvaW5yX3ZvbHVtZXNfMjAxOTAyMTgueGxzeCIKYWdlX21hdGNoX2lkc19maWxlIDwtICJ+L0Rlc2t0b3AvRUxTL2luY29tZV9UQk0vZGF0YS9maW5hbF9kYXRhL2FnZV9tYXRjaGVkX2lkcy5jc3YiCmBgYAoKIyBSZWFkIGluIGRhdGEKYGBge3J9CnZvbHMgPC0KICByZWFkX3hsc3godm9sdW1lc19maWxlLCBzaGVldCA9ICJDU1ggVm9sdW1lcyIpICU+JSAKICByZW5hbWUoCiAgICBwb3NfclNUR19jcyA9IFBvc18xMCwgI3N1cGVyaW9yIHRlbXBvcmFsIGd5cnVzCiAgICBwb3NfbElGR19jcyA9IFBvc18xMSwgI2luZmVyaW9yIGZyb250YWwgZ3lydXMKICAgIHBvc19sTE9DX2NzID0gUG9zXzEyLCAjbGF0ZXJhbCBvY2NpcGl0YWwgZ3lydXMKICAgIHBvc19yTUZHX2NzID0gUG9zXzE0LCAjbWlkZGxlIGZyb250YWwgZ3lydXMKICAgIHBvc19yU0ZHX2NzX2RsUEZDID0gUG9zXzE1LCAjc3VwZXJpb3IgZnJvbnRhbCBneXJ1cwogICAgcG9zX3JQQ0cgPSBQb3NfMTYsICNwb3N0Y2VudHJhbCBneXJ1cywKICAgIHBvc19yU0ZHX2NzX21vdG9yID0gUG9zXzE3LAogICAgcG9zX3JQVFJfY3MgPSBQb3NfMTgsICNwb3N0ZXJpb3IgdGhhbGFtaWMgcmFkaWF0aW9uLAogICAgcG9zX3JNQl9jcyA9IFBvc18xOSwgI21pZGJyYWluLAogICAgcG9zX3JDVl9jcyA9IFBvc18yMCwgI2NlcmViZWxsYXIgdmVybWlzLAogICAgbmVnX0ZHX2NzID0gTmVnXzcsICNmdXNpZm9ybSBneXJ1cywKICAgIG5lZ19sVGhhbF9jcyA9IE5lZ184LCAjdGhhbGFtdXMKICAgIG5lZ19ySGlwcF9jcyA9IE5lZ185LCAjaGlwcG9jYW1wdXMvQ0dICiAgICBuZWdfbEhpcHBfY3MgPSBOZWdfMTAsICNoaXBwb2NhbXB1cy9DR0gvZnVzaWZvcm0gZ3lydXMsCiAgICBuZWdfclRoYWxfY3MgPSBOZWdfMTEsICN0aGFsYW11cwogICAgbmVnX2xBR19jcyA9IE5lZ18xMiAjYW5ndWxhciBneXJ1cwogICkgJT4lIAogIGxlZnRfam9pbigKICAgIHJlYWRfeGxzeCh2b2x1bWVzX2ZpbGUsIHNoZWV0ID0gIkxvbmcgVm9sdW1lcyIpICU+JSAKICAgICAgcmVuYW1lKAogICAgICAgIHBvc19yU1BMX2xnID0gUG9zXzQsICNzdXBlcmlvciBwYXJpZXRhbCBsb2J1bGUKICAgICAgICBwb3NfckxHX2xnID0gUG9zXzUsICNsaW5ndWFsIGd5cnVzLAogICAgICAgIHBvc19sSVRHX2xnID0gUG9zXzYsICNpbmZlcmlvciB0ZW1wb3JhbCBneXJ1cywKICAgICAgICBwb3NfbExHX2xnID0gUG9zXzcsICNsaW5ndWFsIGd5cnVzLAogICAgICAgIG5lZ19ySGlwcF9sZyA9IE5lZ183LCAjaGlwcGNhbXB1cy9DR0gsCiAgICAgICAgbmVnX2xTTEZfbGcgPSBOZWdfOCwgI3N1cGVyaW9yIGxvbmdpdHVkaW5hbCBmYXNjaWN1bHVzLAogICAgICAgIG5lZ19sU0ZHX2xnID0gTmVnXzksICNzdXBlcmlvciBmcm9udGFsIGd5cnVzCiAgICAgICAgbmVnX3JTRkdfbGcgPSBOZWdfMTAsICNzdXBlcmlvciBmcm9udGFsIGd5cnVzCiAgICAgICAgbmVnX2xDZXJlYmVsX2xnID0gTmVnXzExLCAjY2VyZWJlbGx1bQogICAgICAgIG5lZ19yUFRSX2xnID0gTmVnXzEyICNwb3N0ZXJpb3IgdGhhbGFtaWMgcmFkaWF0aW9uCiAgICAgICkgJT4lIAogICAgICBzZWxlY3QoLVQxX0lDViwgLVQxX0FnZSwgLVdoaXRlLCAtSU5SX1NleCwgLVNleCwgLUlOUiksCiAgICBieSA9ICJTdWJqZWN0IgogICkgJT4lIAogIHJlbmFtZShJRCA9IFN1YmplY3QpICU+JSAKICBtdXRhdGUoTWFsZSA9IGFzLmZhY3RvcihTZXgpKSAlPiUgCiAgbGVmdF9qb2luKAogICAgcmVhZF9jc3YoYWdlX21hdGNoX2lkc19maWxlKSAlPiUgCiAgICAgIHJlbmFtZSgKICAgICAgICBJRCA9IEVMU19JRAogICAgICApICU+JSAKICAgICAgbXV0YXRlKAogICAgICAgIGFnZV9tYXRjaGVkID0gMQogICAgICApLAogICAgICBieSA9ICJJRCIKICApCmBgYAoKYGBge3J9CnZvbHNfbWF0Y2ggPC0KICB2b2xzICU+JSAKICBmaWx0ZXIoYWdlX21hdGNoZWQgPT0gMSkKYGBgCgojIENyb3NzLXNlY3Rpb25hbCBzaW1wbGUgZWZmZWN0IHJlZ3Jlc3Npb25zCgpgYGB7cn0KI2NlcmViZWxsYXIgdmVybWlzCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTFGIDwtIGxtKHBvc19yQ1ZfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMUYpCnN0ZF9iZXRhKGxtMUYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xTSA8LSBsbShwb3NfckNWX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTFNKQpzdGRfYmV0YShsbTFNKQoKb3V0bGllclRlc3QobG0xRikgCgpgYGAKCmBgYHtyfQojY2VyZWJlbGxhciB2ZXJtaXM6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTFGYSA8LSBsbShwb3NfckNWX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTFGYSkKc3RkX2JldGEobG0xRmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xTWEgPC0gbG0ocG9zX3JDVl9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xTWEpCnN0ZF9iZXRhKGxtMU1hKQpgYGAKCgpgYGB7cn0KI21pZGJyYWluCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTJGIDwtIGxtKHBvc19yTUJfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMUYpCnN0ZF9iZXRhKGxtMkYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0yTSA8LSBsbShwb3Nfck1CX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTJNKQpzdGRfYmV0YShsbTJNKQoKb3V0bGllclRlc3QobG0xRikgCmBgYAoKYGBge3J9CiNtaWRicmFpbjogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMkZhIDwtIGxtKHBvc19yTUJfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMkZhKQpzdGRfYmV0YShsbTJGYSkKCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTJNYSA8LSBsbShwb3Nfck1CX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTJNYSkKc3RkX2JldGEobG0yTWEpCmBgYAoKYGBge3J9CiNwb3N0ZXJpb3IgdGhhbGFtaWMgcmFkaWF0aW9uCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTNGIDwtIGxtKHBvc19yUFRSX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTNGKQpzdGRfYmV0YShsbTNGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtM00gPC0gbG0ocG9zX3JQVFJfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtM00pCnN0ZF9iZXRhKGxtM00pCgpvdXRsaWVyVGVzdChsbTNGKSAKYGBgCgpgYGB7cn0KI3Bvc3RlcmlvciB0aGFsYW1pYyByYWRpYXRpb246IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTNGYSA8LSBsbShwb3NfclBUUl9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0zRmEpCnN0ZF9iZXRhKGxtM0ZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtM01hIDwtIGxtKHBvc19yUFRSX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTNNYSkKc3RkX2JldGEobG0zTWEpCmBgYAoKYGBge3J9CiNTRkcgMQpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG00RiA8LSBsbShwb3NfclNGR19jc19tb3RvciB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG00RikKc3RkX2JldGEobG00RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTRNIDwtIGxtKHBvc19yU0ZHX2NzX21vdG9yIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTRNKQpzdGRfYmV0YShsbTRNKQoKb3V0bGllclRlc3QobG00RikgCmBgYAoKYGBge3J9CiNTRkcgMTogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtNEZhIDwtIGxtKHBvc19yU0ZHX2NzX21vdG9yIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTRGYSkKc3RkX2JldGEobG00RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG00TWEgPC0gbG0ocG9zX3JTRkdfY3NfbW90b3IgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtNE1hKQpzdGRfYmV0YShsbTRNYSkKYGBgCgpgYGB7cn0KI3Bvc3QgY2VudHJhbCBneXJ1cwpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG01RiA8LSBsbShwb3NfclBDRyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG01RikKc3RkX2JldGEobG01RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTVNIDwtIGxtKHBvc19yUENHIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTVNKQpzdGRfYmV0YShsbTVNKQoKb3V0bGllclRlc3QobG01RikKYGBgCgpgYGB7cn0KI3Bvc3QgY2VudHJhbCBneXJ1czogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtNUZhIDwtIGxtKHBvc19yUENHIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTVGYSkKc3RkX2JldGEobG01RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG01TWEgPC0gbG0ocG9zX3JQQ0cgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtNU1hKQpzdGRfYmV0YShsbTVNYSkKYGBgCgpgYGB7cn0KI1NGRyAyIApjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG02RiA8LSBsbShwb3NfclNGR19jc19kbFBGQyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG02RikKc3RkX2JldGEobG02RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTZNIDwtIGxtKHBvc19yU0ZHX2NzX2RsUEZDIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTZNKQpzdGRfYmV0YShsbTZNKQoKb3V0bGllclRlc3QobG02RikKYGBgCgpgYGB7cn0KI1NGRyAyIDogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtNkZhIDwtIGxtKHBvc19yU0ZHX2NzX2RsUEZDIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTZGYSkKc3RkX2JldGEobG02RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG02TWEgPC0gbG0ocG9zX3JTRkdfY3NfZGxQRkMgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtNk1hKQpzdGRfYmV0YShsbTZNYSkKYGBgCgpgYGB7cn0KI01GRyAgCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTdGIDwtIGxtKHBvc19yTUZHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTdGKQpzdGRfYmV0YShsbTdGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtN00gPC0gbG0ocG9zX3JNRkdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtN00pCnN0ZF9iZXRhKGxtN00pCgpvdXRsaWVyVGVzdChsbTdGKQpgYGAKCmBgYHtyfQojTUZHOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG03RmEgPC0gbG0ocG9zX3JNRkdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtN0ZhKQpzdGRfYmV0YShsbTdGYSkKCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTdNYSA8LSBsbShwb3Nfck1GR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG03TWEpCnN0ZF9iZXRhKGxtN01hKQpgYGAKCmBgYHtyfQojbGF0ZXJpYWwgb2NjaXB0YWwgZ3lydXMgIApjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG04RiA8LSBsbShwb3NfbExPQ19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG04RikKc3RkX2JldGEobG04RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbThNIDwtIGxtKHBvc19sTE9DX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbThNKQpzdGRfYmV0YShsbThNKQoKb3V0bGllclRlc3QobG04TSkKYGBgCgpgYGB7cn0KI2xhdGVyaWFsIG9jY2lwdGFsIGd5cnVzOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG04RmEgPC0gbG0ocG9zX2xMT0NfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtOEZhKQpzdGRfYmV0YShsbThGYSkKCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbThNYSA8LSBsbShwb3NfbExPQ19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG04TWEpCnN0ZF9iZXRhKGxtOE1hKQpgYGAKCmBgYHtyfQojaW5mZXJpb3IgZnJvbnRhbCBneXJ1cwpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG05RiA8LSBsbShwb3NfbElGR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG05RikKc3RkX2JldGEobG05RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTlNIDwtIGxtKHBvc19sSUZHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTlNKQpzdGRfYmV0YShsbTlNKQoKb3V0bGllclRlc3QobG05TSkKYGBgCgpgYGB7cn0KI2luZmVyaW9yIGZyb250YWwgZ3lydXM6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTlGYSA8LSBsbShwb3NfbElGR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG05RmEpCnN0ZF9iZXRhKGxtOUZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtOU1hIDwtIGxtKHBvc19sSUZHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTlNYSkKc3RkX2JldGEobG05TWEpCmBgYAoKYGBge3J9CiNzdXBlcmlvciB0ZW1wb3JhbCBneXJ1cwpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xMEYgPC0gbG0ocG9zX3JTVEdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMTBGKQpzdGRfYmV0YShsbTEwRikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTEwTSA8LSBsbShwb3NfclNUR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0xME0pCnN0ZF9iZXRhKGxtMTBNKQoKb3V0bGllclRlc3QobG0xMEYpCmBgYAoKCmBgYHtyfQojc3VwZXJpb3IgdGVtcG9yYWwgZ3lydXM6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTEwRmEgPC0gbG0ocG9zX3JTVEdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTBGYSkKc3RkX2JldGEobG0xMEZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMTBNYSA8LSBsbShwb3NfclNUR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xME1hKQpzdGRfYmV0YShsbTEwTWEpCmBgYAoKYGBge3J9CiNhbmd1bGFyIGd5cnVzCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTExRiA8LSBsbShuZWdfbEFHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTExRikKc3RkX2JldGEobG0xMUYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xMU0gPC0gbG0obmVnX2xBR19jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0xMU0pCnN0ZF9iZXRhKGxtMTFNKQoKb3V0bGllclRlc3QobG0xMUYpCmBgYAoKYGBge3J9CiNhbmd1bGFyIGd5cnVzOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xMUZhIDwtIGxtKG5lZ19sQUdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTFGYSkKc3RkX2JldGEobG0xMUZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMTFNYSA8LSBsbShuZWdfbEFHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTExTWEpCnN0ZF9iZXRhKGxtMTFNYSkKYGBgCgpgYGB7cn0KI1IuIHRoYWxhbXVzIApjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xMkYgPC0gbG0obmVnX2xUaGFsX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTEyRikKc3RkX2JldGEobG0xMkYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xMk0gPC0gbG0obmVnX2xUaGFsX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTEyTSkKc3RkX2JldGEobG0xMk0pCgpvdXRsaWVyVGVzdChsbTEyRikKYGBgCgpgYGB7cn0KI1IuIHRoYWxhbXVzIDogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMTJGYSA8LSBsbShuZWdfbFRoYWxfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTJGYSkKc3RkX2JldGEobG0xMkZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMTJNYSA8LSBsbShuZWdfbFRoYWxfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTJNYSkKc3RkX2JldGEobG0xMk1hKQpgYGAKCmBgYHtyfQojTC4gQ0dICmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTEzRiA8LSBsbShuZWdfbEhpcHBfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMTNGKQpzdGRfYmV0YShsbTEzRikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTEzTSA8LSBsbShuZWdfbEhpcHBfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMTNNKQpzdGRfYmV0YShsbTEzTSkKCm91dGxpZXJUZXN0KGxtMTNGKQpgYGAKCmBgYHtyfQojTC4gQ0dIOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xM0ZhIDwtIGxtKG5lZ19sSGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xM0ZhKQpzdGRfYmV0YShsbTEzRmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xM01hIDwtIGxtKG5lZ19sSGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xM01hKQpzdGRfYmV0YShsbTEzTWEpCmBgYAoKYGBge3J9CiNSLiBDR0gKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMTRGIDwtIGxtKG5lZ19ySGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0xNEYpCnN0ZF9iZXRhKGxtMTRGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMTRNIDwtIGxtKG5lZ19ySGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0xNE0pCnN0ZF9iZXRhKGxtMTRNKQoKb3V0bGllclRlc3QobG0xNEYpCmBgYAoKYGBge3J9CiNSLiBoaXBwOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xNEZhIDwtIGxtKG5lZ19ySGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xNEZhKQpzdGRfYmV0YShsbTE0RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xNE1hIDwtIGxtKG5lZ19ySGlwcF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xNE1hKQpzdGRfYmV0YShsbTE0TWEpCmBgYAoKYGBge3J9CiNMLiBUaGFsYW11cwpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xNUYgPC0gbG0obmVnX2xUaGFsX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE1RikKc3RkX2JldGEobG0xNUYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xNU0gPC0gbG0obmVnX2xUaGFsX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE1TSkKc3RkX2JldGEobG0xNU0pCgpvdXRsaWVyVGVzdChsbTE1RikKYGBgCgpgYGB7cn0KI0wuIFRoYWxhbXVzOiBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xNUZhIDwtIGxtKG5lZ19sVGhhbF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xNUZhKQpzdGRfYmV0YShsbTE1RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xNU1hIDwtIGxtKG5lZ19sVGhhbF9jcyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xNU1hKQpzdGRfYmV0YShsbTE1TWEpCmBgYAoKYGBge3J9CiNmdXNpZm9ybQpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0xNkYgPC0gbG0obmVnX0ZHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE2RikKc3RkX2JldGEobG0xNkYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xNk0gPC0gbG0obmVnX0ZHX2NzIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE2TSkKc3RkX2JldGEobG0xNk0pCgpvdXRsaWVyVGVzdChsbTE2RikKYGBgCgpgYGB7cn0KIyNmdXNpZm9ybTogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMTZGYSA8LSBsbShuZWdfRkdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTZGYSkKc3RkX2JldGEobG0xNUZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMTZNYSA8LSBsbShuZWdfRkdfY3MgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTZNYSkKc3RkX2JldGEobG0xNk1hKQpgYGAKCiMgTG9uZ2l0dWRpbmFsIAogICAgICAgIApgYGB7cn0KI0wuIGxpbmd1YWwgZ3lydXMKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMTdGIDwtIGxtKHBvc19sTEdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMTdGKQpzdGRfYmV0YShsbTE3RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTE3TSA8LSBsbShwb3NfbExHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE3TSkKc3RkX2JldGEobG0xN00pCgpvdXRsaWVyVGVzdChsbTE3RikKYGBgCgpgYGB7cn0KI0wuIGxpbmd1YWwgZ3lydXM6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTE3RmEgPC0gbG0ocG9zX2xMR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xN0ZhKQpzdGRfYmV0YShsbTE3RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xN01hIDwtIGxtKHBvc19sTEdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTdNYSkKc3RkX2JldGEobG0xN01hKQpgYGAKCmBgYHtyfQojSVRHCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTE4RiA8LSBsbShwb3NfbElUR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0xOEYpCnN0ZF9iZXRhKGxtMThGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMThNIDwtIGxtKHBvc19sSVRHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE4TSkKc3RkX2JldGEobG0xOE0pCgpvdXRsaWVyVGVzdChsbTE4RikKYGBgCgpgYGB7cn0KI0lURzogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMThGYSA8LSBsbShwb3NfbElUR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xOEZhKQpzdGRfYmV0YShsbTE4RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xOE1hIDwtIGxtKHBvc19sSVRHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTE4TWEpCnN0ZF9iZXRhKGxtMThNYSkKYGBgCgpgYGB7cn0KI1IuIGxpbmd1YWwgZ3lydXMKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMTlGIDwtIGxtKHBvc19yTEdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMTlGKQpzdGRfYmV0YShsbTE5RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTE5TSA8LSBsbShwb3NfckxHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTE5TSkKc3RkX2JldGEobG0xOU0pCgpvdXRsaWVyVGVzdChsbTE5RikKCiMgd2l0aG91dCBvdXRsaWVycwpsZ19vdXQgPC0KICB2b2xzICU+JSAKICBzbGljZSgxOjI5LCAzMToxNDcpIAoKIyBTRSBmZW1hbGUKY29udHJhc3RzKGxnX291dCRNYWxlKSA9IGMoMCwgMSkKbG0xOUZzIDwtIGxtKHBvc19yTEdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSBsZ19vdXQpCnN1bW1hcnkobG0xOUZzKQpzdGRfYmV0YShsbTE5RnMpCgpjb250cmFzdHMobGdfb3V0JE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTE5TXMgPC0gbG0ocG9zX3JMR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IGxnX291dCkKc3VtbWFyeShsbTE5TXMpCnN0ZF9iZXRhKGxtMTlNcykKYGBgCgpgYGB7cn0KI1IuIGxpbmd1YWwgZ3lydXM6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTE5RmEgPC0gbG0ocG9zX3JMR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0xOUZhKQpzdGRfYmV0YShsbTE5RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0xOU1hIDwtIGxtKHBvc19yTEdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMTlNYSkKc3RkX2JldGEobG0xOU1hKQpgYGAKCmBgYHtyfQojUi4gc3VwZXJpb3IgcGFyaWV0YWwgbG9idWxlCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTIwRiA8LSBsbShwb3NfclNQTF9sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0yMEYpCnN0ZF9iZXRhKGxtMjBGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMjBNIDwtIGxtKHBvc19yU1BMX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTIwTSkKc3RkX2JldGEobG0yME0pCgpvdXRsaWVyVGVzdChsbTIwRikKYGBgCgpgYGB7cn0KI1IuIHN1cGVyaW9yIHBhcmlldGFsIGxvYnVsZTogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMjBGYSA8LSBsbShwb3NfclNQTF9sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0yMEZhKQpzdGRfYmV0YShsbTIwRmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0yME1hIDwtIGxtKHBvc19yU1BMX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTIwTWEpCnN0ZF9iZXRhKGxtMjBNYSkKYGBgCiAgICAgICAgCmBgYHtyfQojUi4gUFRSCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTIxRiA8LSBsbShuZWdfclBUUl9sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0yMUYpCnN0ZF9iZXRhKGxtMjFGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMjFNIDwtIGxtKG5lZ19yUFRSX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTIxTSkKc3RkX2JldGEobG0yMU0pCgpvdXRsaWVyVGVzdChsbTIxRikKCiMgd2l0aG91dCBvdXRsaWVycwpwdHJfb3V0IDwtCiAgdm9scyAlPiUgCiAgc2xpY2UoMToxMiwgMTQ6MjQsIDI2OjE0NykgCgojIFNFIGZlbWFsZQpjb250cmFzdHMocHRyX291dCRNYWxlKSA9IGMoMCwgMSkKbG0yMUZzIDwtIGxtKG5lZ19yUFRSX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gcHRyX291dCkKc3VtbWFyeShsbTIxRnMpCnN0ZF9iZXRhKGxtMjFGcykKCmNvbnRyYXN0cyhwdHJfb3V0JE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTIxTXMgPC0gbG0obmVnX3JQVFJfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSBwdHJfb3V0KQpzdW1tYXJ5KGxtMjFNKQpzdGRfYmV0YShsbTIxTXMpCmBgYAoKYGBge3J9CiNSLiBQVFI6IGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTIxRmEgPC0gbG0obmVnX3JQVFJfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMjFGYSkKc3RkX2JldGEobG0yMUZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMjFNYSA8LSBsbShuZWdfclBUUl9sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0yMU1hKQpzdGRfYmV0YShsbTIxTWEpCmBgYAoKYGBge3J9CiNjZXJlYmVsbHVtCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTIyRiA8LSBsbShuZWdfbENlcmViZWxfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjJGKQpzdGRfYmV0YShsbTIyRikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTIyTSA8LSBsbShuZWdfbENlcmViZWxfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjJNKQpzdGRfYmV0YShsbTIyTSkKCm91dGxpZXJUZXN0KGxtMjJGKQpgYGAKCmBgYHtyfQojY2VyZWJlbGx1bTogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMjJGYSA8LSBsbShuZWdfbENlcmViZWxfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMjJGYSkKc3RkX2JldGEobG0yMkZhKQoKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMjJNYSA8LSBsbShuZWdfbENlcmViZWxfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMjJNYSkKc3RkX2JldGEobG0yMk1hKQpgYGAKCmBgYHtyfQojci4gU0ZHCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTIzRiA8LSBsbShuZWdfclNGR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0yM0YpCnN0ZF9iZXRhKGxtMjNGKQoKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDEsIDApCiNTRSBtYWxlCmxtMjNNIDwtIGxtKG5lZ19yU0ZHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTIzTSkKc3RkX2JldGEobG0yM00pCgpvdXRsaWVyVGVzdChsbTIzRikKYGBgCgpgYGB7cn0KI3IuIFNGRzogYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMjNGYSA8LSBsbShuZWdfclNGR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0yM0ZhKQpzdGRfYmV0YShsbTIzRmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0yM01hIDwtIGxtKG5lZ19yU0ZHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTIzTWEpCnN0ZF9iZXRhKGxtMjNNYSkKYGBgCgpgYGB7cn0KI0wuIFNGRyAKY29udHJhc3RzKHZvbHMkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMjRGIDwtIGxtKG5lZ19sU0ZHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9scykKc3VtbWFyeShsbTI0RikKc3RkX2JldGEobG0yNEYpCgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0yNE0gPC0gbG0obmVnX2xTRkdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjRNKQpzdGRfYmV0YShsbTI0TSkKCm91dGxpZXJUZXN0KGxtMjRGKQoKIyB3aXRob3V0IG91dGxpZXJzCnNmZ19vdXQgPC0KICB2b2xzICU+JSAKICBzbGljZSgxOjExNiwgMTE4OjE0NykgCgojIFNFIGZlbWFsZQpjb250cmFzdHMoc2ZnX291dCRNYWxlKSA9IGMoMCwgMSkKbG0yNEZzIDwtIGxtKG5lZ19sU0ZHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gc2ZnX291dCkKc3VtbWFyeShsbTI0RnMpCnN0ZF9iZXRhKGxtMjRGcykKCmNvbnRyYXN0cyhzZmdfb3V0JE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTI0TXMgPC0gbG0obmVnX2xTRkdfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSBzZmdfb3V0KQpzdW1tYXJ5KGxtMjRNcykKc3RkX2JldGEobG0yNE1zKQpgYGAKCmBgYHtyfQojTC4gU0ZHOiAgYWdlIG1hdGNoZWQKY29udHJhc3RzKHZvbHNfbWF0Y2gkTWFsZSkgPSBjKDAsIDEpCiMgU0UgZmVtYWxlCmxtMjRGYSA8LSBsbShuZWdfbFNGR19sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHNfbWF0Y2gpCnN1bW1hcnkobG0yNEZhKQpzdGRfYmV0YShsbTI0RmEpCgpjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMSwgMCkKI1NFIG1hbGUKbG0yNE1hIDwtIGxtKG5lZ19sU0ZHX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTI0TWEpCnN0ZF9iZXRhKGxtMjRNYSkKYGBgCgpgYGB7cn0KI1NMRgpjb250cmFzdHModm9scyRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0yNUYgPC0gbG0obmVnX2xTTEZfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjVGKQpzdGRfYmV0YShsbTI1RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTI1TSA8LSBsbShuZWdfbFNMRl9sZyB+IHNxcnQoSU5SKSAqIE1hbGUgKyBUMV9BZ2UgKyBXaGl0ZSArIFQxX0lDViwgZGF0YSA9IHZvbHMpCnN1bW1hcnkobG0yNU0pCnN0ZF9iZXRhKGxtMjVNKQoKb3V0bGllclRlc3QobG0yNUYpCmBgYAoKYGBge3J9CiNTTEY6ICBhZ2UgbWF0Y2hlZApjb250cmFzdHModm9sc19tYXRjaCRNYWxlKSA9IGMoMCwgMSkKIyBTRSBmZW1hbGUKbG0yNUZhIDwtIGxtKG5lZ19sU0xGX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTI1RmEpCnN0ZF9iZXRhKGxtMjVGYSkKCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTI1TWEgPC0gbG0obmVnX2xTTEZfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzX21hdGNoKQpzdW1tYXJ5KGxtMjVNYSkKc3RkX2JldGEobG0yNU1hKQpgYGAKCmBgYHtyfQojUi4gQ0dICmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTI2RiA8LSBsbShuZWdfckhpcHBfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjZGKQpzdGRfYmV0YShsbTI2RikKCmNvbnRyYXN0cyh2b2xzJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTI2TSA8LSBsbShuZWdfckhpcHBfbGcgfiBzcXJ0KElOUikgKiBNYWxlICsgVDFfQWdlICsgV2hpdGUgKyBUMV9JQ1YsIGRhdGEgPSB2b2xzKQpzdW1tYXJ5KGxtMjZNKQpzdGRfYmV0YShsbTI2TSkKCm91dGxpZXJUZXN0KGxtMjZGKQpgYGAKCgpgYGB7cn0KI1IuIENHSDogIGFnZSBtYXRjaGVkCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygwLCAxKQojIFNFIGZlbWFsZQpsbTI2RmEgPC0gbG0obmVnX3JIaXBwX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTI2RmEpCnN0ZF9iZXRhKGxtMjZGYSkKCmNvbnRyYXN0cyh2b2xzX21hdGNoJE1hbGUpID0gYygxLCAwKQojU0UgbWFsZQpsbTI2TWEgPC0gbG0obmVnX3JIaXBwX2xnIH4gc3FydChJTlIpICogTWFsZSArIFQxX0FnZSArIFdoaXRlICsgVDFfSUNWLCBkYXRhID0gdm9sc19tYXRjaCkKc3VtbWFyeShsbTI2TWEpCnN0ZF9iZXRhKGxtMjZNYSkKYGBgCgojIFJlc2lkdWFsaXplIGFsbCB2b2x1bWVzCgojI2Z1bGwgc2FtcGxlCmBgYHtyfQpyZXNpZHVhbGl6ZV9tb2RlbHNfY3MgPC0KICB2b2xzICU+JSAKICBnYXRoZXIocmVnaW9uLCB2b2x1bWUsIHBvc19yU1RHX2NzOm5lZ19sQUdfY3MpICU+JSAKICBncm91cF9ieShyZWdpb24pICU+JSAKICBuZXN0KCkgJT4lIAogIG11dGF0ZSgKICAgIHJlc2lkdWFscyA9IG1hcCgKICAgICAgZGF0YSwgCiAgICAgIH5sbSh2b2x1bWUgfiBUMV9JQ1YgKyBXaGl0ZSArIFQxX0FnZSwgZGF0YSA9IC4pJHJlc2lkdWFscwogICAgKQogICkgJT4lIAogIHVubmVzdCgpICU+JSAKICBtdXRhdGUoCiAgICByZWdpb24gPSBhcy5mYWN0b3IocmVnaW9uKQogICkKCnJlc2lkdWFsaXplX21vZGVsc19sZyA8LQogIHZvbHMgJT4lIAogIGZpbHRlcighaXMubmEocG9zX3JTUExfbGcpKSAlPiUgCiAgZ2F0aGVyKHJlZ2lvbiwgdm9sdW1lLCBwb3NfclNQTF9sZzpuZWdfclBUUl9sZykgJT4lIAogIGdyb3VwX2J5KHJlZ2lvbikgJT4lIAogIG5lc3QoKSAlPiUgCiAgbXV0YXRlKAogICAgcmVzaWR1YWxzID0gbWFwKAogICAgICBkYXRhLCAKICAgICAgfmxtKHZvbHVtZSB+IFQxX0lDViArIFdoaXRlICsgVDFfQWdlICsgSW50ZXJ2YWwsIGRhdGEgPSAuKSRyZXNpZHVhbHMKICAgICkKICApICU+JSAKICB1bm5lc3QoKSAlPiUgCiAgbXV0YXRlKAogICAgcmVnaW9uID0gYXMuZmFjdG9yKHJlZ2lvbikKICApCmBgYAoKIyNhZ2UgbWF0Y2hlZApgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2NzX2FnZW1hdGNoIDwtCiAgdm9sc19tYXRjaCAlPiUgCiAgZ2F0aGVyKHJlZ2lvbiwgdm9sdW1lLCBwb3NfclNUR19jczpuZWdfbEFHX2NzKSAlPiUgCiAgZ3JvdXBfYnkocmVnaW9uKSAlPiUgCiAgbmVzdCgpICU+JSAKICBtdXRhdGUoCiAgICByZXNpZHVhbHMgPSBtYXAoCiAgICAgIGRhdGEsIAogICAgICB+bG0odm9sdW1lIH4gVDFfSUNWICsgV2hpdGUgKyBUMV9BZ2UsIGRhdGEgPSAuKSRyZXNpZHVhbHMKICAgICkKICApICU+JSAKICB1bm5lc3QoKSAlPiUgCiAgbXV0YXRlKAogICAgcmVnaW9uID0gYXMuZmFjdG9yKHJlZ2lvbikKICApCgpyZXNpZHVhbGl6ZV9tb2RlbHNfbGdfYWdlbWF0Y2ggPC0KICB2b2xzX21hdGNoICU+JSAKICBmaWx0ZXIoIWlzLm5hKHBvc19yU1BMX2xnKSkgJT4lIAogIGdhdGhlcihyZWdpb24sIHZvbHVtZSwgcG9zX3JTUExfbGc6bmVnX3JQVFJfbGcpICU+JSAKICBncm91cF9ieShyZWdpb24pICU+JSAKICBuZXN0KCkgJT4lIAogIG11dGF0ZSgKICAgIHJlc2lkdWFscyA9IG1hcCgKICAgICAgZGF0YSwgCiAgICAgIH5sbSh2b2x1bWUgfiBUMV9JQ1YgKyBXaGl0ZSArIFQxX0FnZSArIEludGVydmFsLCBkYXRhID0gLikkcmVzaWR1YWxzCiAgICApCiAgKSAlPiUgCiAgdW5uZXN0KCkgJT4lIAogIG11dGF0ZSgKICAgIHJlZ2lvbiA9IGFzLmZhY3RvcihyZWdpb24pCiAgKQpgYGAKCgojIFZpc3VhbGl6ZQoKIyMgQ3Jvc3Mtc2VjdGlvbmFsCmBgYHtyfQpyZXNpZHVhbGl6ZV9tb2RlbHNfY3MgPC0KICByZXNpZHVhbGl6ZV9tb2RlbHNfY3MgJT4lIAogIG11dGF0ZSgKICAgIHJlZ2lvbl9uYW1lZCA9IGZhY3RvcigKICAgICAgcmVnaW9uLAogICAgICBsZXZlbHMgPSBjKAogICAgICAgICJwb3NfckNWX2NzIiwgCiAgICAgICAgInBvc19yTUJfY3MiLCAKICAgICAgICAicG9zX3JQVFJfY3MiLCAKICAgICAgICAicG9zX3JTRkdfY3NfbW90b3IiLCAKICAgICAgICAicG9zX3JQQ0ciLAogICAgICAgICJwb3NfclNGR19jc19kbFBGQyIsCiAgICAgICAgInBvc19yTUZHX2NzIiwKICAgICAgICAicG9zX2xMT0NfY3MiLAogICAgICAgICJwb3NfbElGR19jcyIsCiAgICAgICAgInBvc19yU1RHX2NzIiwKICAgICAgICAibmVnX2xBR19jcyIsCiAgICAgICAgIm5lZ19yVGhhbF9jcyIsIAogICAgICAgICJuZWdfbEhpcHBfY3MiLCAKICAgICAgICAibmVnX3JIaXBwX2NzIiwgCiAgICAgICAgIm5lZ19sVGhhbF9jcyIsIAogICAgICAgICJuZWdfRkdfY3MiCiAgICAgICksCiAgICAgIGxhYmVscyA9IGMoCiAgICAgICAgIlJpZ2h0IENWICgzLCAtNDcsIC0zNSkiLAogICAgICAgICJSaWdodCBtaWRicmFpbiAoMywgLTMyLCAtNCkiLAogICAgICAgICJSaWdodCBQVFIgKDQwLCAtNTUsIDIpIiwKICAgICAgICAiUmlnaHQgU0ZHICg5LCAtOCwgNTQpIiwKICAgICAgICAiUmlnaHQgUG9HICgxNSwgLTMyLCA2OSkiLAogICAgICAgICJSaWdodCBTRkcgKDExLCA0NiwgNDUpIiwKICAgICAgICAiUmlnaHQgTUZHICg1MSwgMzgsIDUpIiwKICAgICAgICAiTGVmdCBMT0cgKC0yMywgLTg5LCAzKSIsCiAgICAgICAgIkxlZnQgSUZHICgtNDgsIDQ2LCAtOCkiLAogICAgICAgICJSaWdodCBTVEcgKDYzLCAtNDcsIDE5KSIsCiAgICAgICAgIkxlZnQgQUcgKC00NiwgLTM5LCAzMykiLAogICAgICAgICJSaWdodCB0aGFsYW11cyAoMTMsIC0yMywgOCkiLAogICAgICAgICJMZWZ0IENHSCAoLTI5LCAtMTksIC0zMykiLAogICAgICAgICJSaWdodCBDR0ggKDIzLCAtMTQsIC0yMykiLAogICAgICAgICJMZWZ0IHRoYWxhbXVzICgtOSwgLTI0LCAxMCkiLAogICAgICAgICJMZWZ0IEZHICgtNDksIC00OSwgLTE2KSIKICAgICAgKQogICAgKSwKICAgIFNleCA9IGZhY3RvcigKICAgICAgTWFsZSwgCiAgICAgIGxldmVscyA9IGMoMCwgMSksCiAgICAgIGxhYmVscyA9IGMoIkZlbWFsZSIsICJNYWxlIikKICAgICkKICApCgpgYGAKCmBgYHtyfQpyZXNpZHVhbGl6ZV9tb2RlbHNfY3NfYWdlbWF0Y2ggPC0KICByZXNpZHVhbGl6ZV9tb2RlbHNfY3NfYWdlbWF0Y2ggJT4lIAogIG11dGF0ZSgKICAgIHJlZ2lvbl9uYW1lZCA9IGZhY3RvcigKICAgICAgcmVnaW9uLAogICAgICBsZXZlbHMgPSBjKAogICAgICAgICJwb3NfckNWX2NzIiwgCiAgICAgICAgInBvc19yTUJfY3MiLCAKICAgICAgICAicG9zX3JQVFJfY3MiLCAKICAgICAgICAicG9zX3JTRkdfY3NfbW90b3IiLCAKICAgICAgICAicG9zX3JQQ0ciLAogICAgICAgICJwb3NfclNGR19jc19kbFBGQyIsCiAgICAgICAgInBvc19yTUZHX2NzIiwKICAgICAgICAicG9zX2xMT0NfY3MiLAogICAgICAgICJwb3NfbElGR19jcyIsCiAgICAgICAgInBvc19yU1RHX2NzIiwKICAgICAgICAibmVnX2xBR19jcyIsCiAgICAgICAgIm5lZ19yVGhhbF9jcyIsIAogICAgICAgICJuZWdfbEhpcHBfY3MiLCAKICAgICAgICAibmVnX3JIaXBwX2NzIiwgCiAgICAgICAgIm5lZ19sVGhhbF9jcyIsIAogICAgICAgICJuZWdfRkdfY3MiCiAgICAgICksCiAgICAgIGxhYmVscyA9IGMoCiAgICAgICAgIlJpZ2h0IENWICgzLCAtNDcsIC0zNSkiLAogICAgICAgICJSaWdodCBtaWRicmFpbiAoMywgLTMyLCAtNCkiLAogICAgICAgICJSaWdodCBQVFIgKDQwLCAtNTUsIDIpIiwKICAgICAgICAiUmlnaHQgU0ZHICg5LCAtOCwgNTQpIiwKICAgICAgICAiUmlnaHQgUG9HICgxNSwgLTMyLCA2OSkiLAogICAgICAgICJSaWdodCBTRkcgKDExLCA0NiwgNDUpIiwKICAgICAgICAiUmlnaHQgTUZHICg1MSwgMzgsIDUpIiwKICAgICAgICAiTGVmdCBMT0cgKC0yMywgLTg5LCAzKSIsCiAgICAgICAgIkxlZnQgSUZHICgtNDgsIDQ2LCAtOCkiLAogICAgICAgICJSaWdodCBTVEcgKDYzLCAtNDcsIDE5KSIsCiAgICAgICAgIkxlZnQgQUcgKC00NiwgLTM5LCAzMykiLAogICAgICAgICJSaWdodCB0aGFsYW11cyAoMTMsIC0yMywgOCkiLAogICAgICAgICJMZWZ0IENHSCAoLTI5LCAtMTksIC0zMykiLAogICAgICAgICJSaWdodCBDR0ggKDIzLCAtMTQsIC0yMykiLAogICAgICAgICJMZWZ0IHRoYWxhbXVzICgtOSwgLTI0LCAxMCkiLAogICAgICAgICJMZWZ0IEZHICgtNDksIC00OSwgLTE2KSIKICAgICAgKQogICAgKSwKICAgIFNleCA9IGZhY3RvcigKICAgICAgTWFsZSwgCiAgICAgIGxldmVscyA9IGMoMCwgMSksCiAgICAgIGxhYmVscyA9IGMoIkZlbWFsZSIsICJNYWxlIikKICAgICkKICApCgpgYGAKCmBgYHtyfQpyZXNpZHVhbGl6ZV9tb2RlbHNfY3MgJT4lIAogIGZpbHRlcihzdHJfZGV0ZWN0KHJlZ2lvbiwgIm5lZyIpKSAlPiUgCiAgZ2dwbG90KGFlcyhJTlIsIHJlc2lkdWFscywgY29sb3IgPSBTZXgsIGZpbGwgPSBTZXgpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgYWxwaGEgPSAxLzIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBmb3JtdWxhID0geSB+IHNxcnQoeCksIHNpemUgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcS5pbnQoMCwgMiwgLjI1KSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgKICAgIHZhbHVlcyA9IGMoImRhcmtyZWQiLCAicm95YWxibHVlNCIpCiAgKSArCiAgc2NhbGVfZmlsbF9tYW51YWwoCiAgICB2YWx1ZXMgPSBjKCJkYXJrcmVkIiwgInJveWFsYmx1ZTQiKQogICkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSwKICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMiksCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksCiAgICBsZWdlbmQua2V5LnNpemUgPSB1bml0KDIsICdsaW5lcycpCiAgKSArCiAgZmFjZXRfd3JhcCgufnJlZ2lvbl9uYW1lZCkgKwogIGxhYnMoCiAgICB5ID0gIlZvbHVtZSBpbiBlYXJseSBhZG9sZXNjZW5jZVxuKHJlc2lkdWFscykiLAogICAgeCA9ICJGYW1pbHkgaW5jb21lLXRvLW5lZWRzIHJhdGlvIgogICkKCmdnc2F2ZSgKICAifi9EZXNrdG9wL0VMUy9pbmNvbWVfVEJNL2luY29tZV9UQk1fc3luYy9wbG90cy9uZWdfY3Jvc3Mtc2VjdGlvbmFsLnBuZyIsCiAgaGVpZ2h0ID0gMTEsCiAgd2lkdGggPSAxMwopCmBgYAoKYGBge3J9CnJlc2lkdWFsaXplX21vZGVsc19jc19hZ2VtYXRjaCAlPiUgCiAgZmlsdGVyKHN0cl9kZXRlY3QocmVnaW9uLCAibmVnIikpICU+JSAKICBnZ3Bsb3QoYWVzKElOUiwgcmVzaWR1YWxzLCBjb2xvciA9IFNleCwgZmlsbCA9IFNleCkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzLCBhbHBoYSA9IDEvMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGZvcm11bGEgPSB5IH4gc3FydCh4KSwgc2l6ZSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxLmludCgwLCAyLCAuMjUpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICBzY2FsZV9maWxsX21hbnVhbCgKICAgIHZhbHVlcyA9IGMoImRhcmtyZWQiLCAicm95YWxibHVlNCIpCiAgKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIyKSwKICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSwKICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMiwgJ2xpbmVzJykKICApICsKICBmYWNldF93cmFwKC5+cmVnaW9uX25hbWVkKSArCiAgbGFicygKICAgIHkgPSAiVm9sdW1lIGluIGVhcmx5IGFkb2xlc2NlbmNlXG4ocmVzaWR1YWxzKSIsCiAgICB4ID0gIkZhbWlseSBpbmNvbWUtdG8tbmVlZHMgcmF0aW8iCiAgKQoKZ2dzYXZlKAogICJ+L0Rlc2t0b3AvRUxTL2luY29tZV9UQk0vaW5jb21lX1RCTV9zeW5jL3Bsb3RzL25lZ19jcm9zcy1zZWN0aW9uYWxfYWdlbWF0Y2gucG5nIiwKICBoZWlnaHQgPSAxMSwKICB3aWR0aCA9IDEzCikKYGBgCgpgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2NzICU+JSAKICBmaWx0ZXIoc3RyX2RldGVjdChyZWdpb24sICJwb3MiKSkgJT4lIAogIGdncGxvdChhZXMoSU5SLCByZXNpZHVhbHMsIGNvbG9yID0gU2V4LCBmaWxsID0gU2V4KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMsIGFscGhhID0gMS8yKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgZm9ybXVsYSA9IHkgfiBzcXJ0KHgpLCBzaXplID0gMikgKwogICNzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxLmludCgwLCAyLCAuMikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoCiAgICB2YWx1ZXMgPSBjKCJkYXJrcmVkIiwgInJveWFsYmx1ZTQiKQogICkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjIpLAogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCgyLCAnbGluZXMnKQogICkgKwogIGZhY2V0X3dyYXAoLn5yZWdpb25fbmFtZWQpICsKICBsYWJzKAogICAgeSA9ICJWb2x1bWUgaW4gZWFybHkgYWRvbGVzY2VuY2VcbihyZXNpZHVhbHMpIiwKICAgIHggPSAiRmFtaWx5IGluY29tZS10by1uZWVkcyByYXRpbyIKICApCgpnZ3NhdmUoCiAgIn4vRGVza3RvcC9FTFMvaW5jb21lX1RCTS9pbmNvbWVfVEJNX3N5bmMvcGxvdHMvcG9zX2Nyb3NzLXNlY3Rpb25hbC5wbmciLAogIGhlaWdodCA9IDEyLAogIHdpZHRoID0gMTUuNQopCmBgYAoKYGBge3J9CnJlc2lkdWFsaXplX21vZGVsc19jc19hZ2VtYXRjaCAlPiUgCiAgZmlsdGVyKHN0cl9kZXRlY3QocmVnaW9uLCAicG9zIikpICU+JSAKICBnZ3Bsb3QoYWVzKElOUiwgcmVzaWR1YWxzLCBjb2xvciA9IFNleCwgZmlsbCA9IFNleCkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzLCBhbHBoYSA9IDEvMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGZvcm11bGEgPSB5IH4gc3FydCh4KSwgc2l6ZSA9IDIpICsKICAjc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcS5pbnQoMCwgMiwgLjIpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICBzY2FsZV9maWxsX21hbnVhbCgKICAgIHZhbHVlcyA9IGMoImRhcmtyZWQiLCAicm95YWxibHVlNCIpCiAgKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIyKSwKICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMiwgJ2xpbmVzJykKICApICsKICBmYWNldF93cmFwKC5+cmVnaW9uX25hbWVkKSArCiAgbGFicygKICAgIHkgPSAiVm9sdW1lIGluIGVhcmx5IGFkb2xlc2NlbmNlXG4ocmVzaWR1YWxzKSIsCiAgICB4ID0gIkZhbWlseSBpbmNvbWUtdG8tbmVlZHMgcmF0aW8iCiAgKQoKZ2dzYXZlKAogICJ+L0Rlc2t0b3AvRUxTL2luY29tZV9UQk0vaW5jb21lX1RCTV9zeW5jL3Bsb3RzL3Bvc19jcm9zcy1zZWN0aW9uYWxfYWdlbWF0Y2gucG5nIiwKICBoZWlnaHQgPSAxMiwKICB3aWR0aCA9IDE1LjUKKQpgYGAKCiMjIExvbmdpdHVkaW5hbApgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2xnIDwtCiAgcmVzaWR1YWxpemVfbW9kZWxzX2xnICU+JSAKICBtdXRhdGUoCiAgICByZWdpb25fbmFtZWQgPSBmYWN0b3IoCiAgICAgIHJlZ2lvbiwKICAgICAgbGV2ZWxzID0gYygKICAgICAgICAicG9zX2xMR19sZyIsCiAgICAgICAgInBvc19sSVRHX2xnIiwKICAgICAgICAicG9zX3JMR19sZyIsCiAgICAgICAgInBvc19yU1BMX2xnIiwKICAgICAgICAibmVnX3JQVFJfbGciLAogICAgICAgICJuZWdfbENlcmViZWxfbGciLAogICAgICAgICJuZWdfclNGR19sZyIsCiAgICAgICAgIm5lZ19sU0ZHX2xnIiwKICAgICAgICAibmVnX2xTTEZfbGciLAogICAgICAgICJuZWdfckhpcHBfbGciCiAgICAgICksCiAgICAgIGxhYmVscyA9IGMoCiAgICAgICAgIkxlZnQgTEcgKC0yMCwgLTc1LCAtNSkiLAogICAgICAgICJMZWZ0IElURyAoLTQ4LCAxLCAtNDApIiwKICAgICAgICAiUmlnaHQgTEcgKDEyLCAtNzMsIC05KSIsCiAgICAgICAgIlIgU1BMICgyNywgLTYwLCA1NikiLAogICAgICAgICJSaWdodCBQVFIgKDI0LCAtNzAsIDcpIiwKICAgICAgICAiTGVmdCBjZXJlYmVsbHVtICgtMTgsIC02NiwgLTIxKSIsCiAgICAgICAgIlJpZ2h0IFNGRyAoMTcsIC01LCA1OCkiLAogICAgICAgICJMZWZ0IFNGRyAoLTE2LCA2MiwgLTEwKSIsCiAgICAgICAgIkxlZnQgU0xGICgtMzMsIC00NCwgMTYpIiwKICAgICAgICAiUmlnaHQgQ0dIICgyNiwgLTMzLCAtNykiCiAgICAgICkKICAgICksCiAgICBTZXggPSBmYWN0b3IoCiAgICAgIE1hbGUsIAogICAgICBsZXZlbHMgPSBjKDAsIDEpLAogICAgICBsYWJlbHMgPSBjKCJGZW1hbGUiLCAiTWFsZSIpCiAgICApCiAgKSAKYGBgCgpgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2xnX2FnZW1hdGNoIDwtCiAgcmVzaWR1YWxpemVfbW9kZWxzX2xnX2FnZW1hdGNoICU+JSAKICBtdXRhdGUoCiAgICByZWdpb25fbmFtZWQgPSBmYWN0b3IoCiAgICAgIHJlZ2lvbiwKICAgICAgbGV2ZWxzID0gYygKICAgICAgICAicG9zX2xMR19sZyIsCiAgICAgICAgInBvc19sSVRHX2xnIiwKICAgICAgICAicG9zX3JMR19sZyIsCiAgICAgICAgInBvc19yU1BMX2xnIiwKICAgICAgICAibmVnX3JQVFJfbGciLAogICAgICAgICJuZWdfbENlcmViZWxfbGciLAogICAgICAgICJuZWdfclNGR19sZyIsCiAgICAgICAgIm5lZ19sU0ZHX2xnIiwKICAgICAgICAibmVnX2xTTEZfbGciLAogICAgICAgICJuZWdfckhpcHBfbGciCiAgICAgICksCiAgICAgIGxhYmVscyA9IGMoCiAgICAgICAgIkxlZnQgTEcgKC0yMCwgLTc1LCAtNSkiLAogICAgICAgICJMZWZ0IElURyAoLTQ4LCAxLCAtNDApIiwKICAgICAgICAiUmlnaHQgTEcgKDEyLCAtNzMsIC05KSIsCiAgICAgICAgIlIgU1BMICgyNywgLTYwLCA1NikiLAogICAgICAgICJSaWdodCBQVFIgKDI0LCAtNzAsIDcpIiwKICAgICAgICAiTGVmdCBjZXJlYmVsbHVtICgtMTgsIC02NiwgLTIxKSIsCiAgICAgICAgIlJpZ2h0IFNGRyAoMTcsIC01LCA1OCkiLAogICAgICAgICJMZWZ0IFNGRyAoLTE2LCA2MiwgLTEwKSIsCiAgICAgICAgIkxlZnQgU0xGICgtMzMsIC00NCwgMTYpIiwKICAgICAgICAiUmlnaHQgQ0dIICgyNiwgLTMzLCAtNykiCiAgICAgICkKICAgICksCiAgICBTZXggPSBmYWN0b3IoCiAgICAgIE1hbGUsIAogICAgICBsZXZlbHMgPSBjKDAsIDEpLAogICAgICBsYWJlbHMgPSBjKCJGZW1hbGUiLCAiTWFsZSIpCiAgICApCiAgKSAKYGBgCgpgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2xnICU+JSAKICBmaWx0ZXIoc3RyX2RldGVjdChyZWdpb24sICJuZWciKSkgJT4lIAogIGdncGxvdChhZXMoSU5SLCByZXNpZHVhbHMsIGNvbG9yID0gU2V4LCBmaWxsID0gU2V4KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMsIGFscGhhID0gMS8yKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgZm9ybXVsYSA9IHkgfiBzcXJ0KHgpLCBzaXplID0gMikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEuaW50KDAsIDIsIC4yNSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoCiAgICB2YWx1ZXMgPSBjKCJkYXJrcmVkIiwgInJveWFsYmx1ZTQiKQogICkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjIpLAogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCgyLCAnbGluZXMnKQogICkgKwogIGZhY2V0X3dyYXAoLn5yZWdpb25fbmFtZWQpICsKICBsYWJzKAogICAgeSA9ICJDaGFuZ2UgaW4gdm9sdW1lIGZyb20gZWFybGllciB0byBsYXRlciBhZG9sZXNjZW5jZVxuKHJlc2lkdWFscykiLAogICAgeCA9ICJGYW1pbHkgaW5jb21lLXRvLW5lZWRzIHJhdGlvIgogICkKCmdnc2F2ZSgKICAifi9EZXNrdG9wL0VMUy9pbmNvbWVfVEJNL2luY29tZV9UQk1fc3luYy9wbG90cy9uZWdfbG9uZ2l0dWRpbmFsLnBuZyIsCiAgaGVpZ2h0ID0gMTEsCiAgd2lkdGggPSAxMwopCmBgYAoKYGBge3J9CnJlc2lkdWFsaXplX21vZGVsc19sZ19hZ2VtYXRjaCAlPiUgCiAgZmlsdGVyKHN0cl9kZXRlY3QocmVnaW9uLCAibmVnIikpICU+JSAKICBnZ3Bsb3QoYWVzKElOUiwgcmVzaWR1YWxzLCBjb2xvciA9IFNleCwgZmlsbCA9IFNleCkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzLCBhbHBoYSA9IDEvMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGZvcm11bGEgPSB5IH4gc3FydCh4KSwgc2l6ZSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxLmludCgwLCAyLCAuMjUpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICBzY2FsZV9maWxsX21hbnVhbCgKICAgIHZhbHVlcyA9IGMoImRhcmtyZWQiLCAicm95YWxibHVlNCIpCiAgKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIyKSwKICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSwKICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMiwgJ2xpbmVzJykKICApICsKICBmYWNldF93cmFwKC5+cmVnaW9uX25hbWVkKSArCiAgbGFicygKICAgIHkgPSAiQ2hhbmdlIGluIHZvbHVtZSBmcm9tIGVhcmxpZXIgdG8gbGF0ZXIgYWRvbGVzY2VuY2VcbihyZXNpZHVhbHMpIiwKICAgIHggPSAiRmFtaWx5IGluY29tZS10by1uZWVkcyByYXRpbyIKICApCgpnZ3NhdmUoCiAgIn4vRGVza3RvcC9FTFMvaW5jb21lX1RCTS9pbmNvbWVfVEJNX3N5bmMvcGxvdHMvbmVnX2xvbmdpdHVkaW5hbF9hZ2VtYXRjaC5wbmciLAogIGhlaWdodCA9IDExLAogIHdpZHRoID0gMTMKKQpgYGAKCmBgYHtyfQpyZXNpZHVhbGl6ZV9tb2RlbHNfbGcgJT4lIAogIGZpbHRlcihzdHJfZGV0ZWN0KHJlZ2lvbiwgInBvcyIpKSAlPiUgCiAgZ2dwbG90KGFlcyhJTlIsIHJlc2lkdWFscywgY29sb3IgPSBTZXgsIGZpbGwgPSBTZXgpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgYWxwaGEgPSAxLzIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBmb3JtdWxhID0geSB+IHNxcnQoeCksIHNpemUgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcS5pbnQoMCwgMiwgLjI1KSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgKICAgIHZhbHVlcyA9IGMoImRhcmtyZWQiLCAicm95YWxibHVlNCIpCiAgKSArCiAgc2NhbGVfZmlsbF9tYW51YWwoCiAgICB2YWx1ZXMgPSBjKCJkYXJrcmVkIiwgInJveWFsYmx1ZTQiKQogICkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSwKICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMiksCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksCiAgICBsZWdlbmQua2V5LnNpemUgPSB1bml0KDIsICdsaW5lcycpCiAgKSArCiAgZmFjZXRfd3JhcCgufnJlZ2lvbl9uYW1lZCkgKwogIGxhYnMoCiAgICB5ID0gIkNoYW5nZSBpbiB2b2x1bWUgZnJvbSBlYXJsaWVyIHRvIGxhdGVyIGFkb2xlc2NlbmNlXG4ocmVzaWR1YWxzKSIsCiAgICB4ID0gIkZhbWlseSBpbmNvbWUtdG8tbmVlZHMgcmF0aW8iCiAgKQoKZ2dzYXZlKAogICJ+L0Rlc2t0b3AvRUxTL2luY29tZV9UQk0vaW5jb21lX1RCTV9zeW5jL3Bsb3RzL3Bvc19sb25naXR1ZGluYWwucG5nIiwKICBoZWlnaHQgPSAxMSwKICB3aWR0aCA9IDEzCikKYGBgCgpgYGB7cn0KcmVzaWR1YWxpemVfbW9kZWxzX2xnX2FnZW1hdGNoICU+JSAKICBmaWx0ZXIoc3RyX2RldGVjdChyZWdpb24sICJwb3MiKSkgJT4lIAogIGdncGxvdChhZXMoSU5SLCByZXNpZHVhbHMsIGNvbG9yID0gU2V4LCBmaWxsID0gU2V4KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMsIGFscGhhID0gMS8yKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgZm9ybXVsYSA9IHkgfiBzcXJ0KHgpLCBzaXplID0gMikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEuaW50KDAsIDIsIC4yNSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoCiAgICB2YWx1ZXMgPSBjKCJkYXJrcmVkIiwgInJveWFsYmx1ZTQiKQogICkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKAogICAgdmFsdWVzID0gYygiZGFya3JlZCIsICJyb3lhbGJsdWU0IikKICApICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjIpLAogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLAogICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCgyLCAnbGluZXMnKQogICkgKwogIGZhY2V0X3dyYXAoLn5yZWdpb25fbmFtZWQpICsKICBsYWJzKAogICAgeSA9ICJDaGFuZ2UgaW4gdm9sdW1lIGZyb20gZWFybGllciB0byBsYXRlciBhZG9sZXNjZW5jZVxuKHJlc2lkdWFscykiLAogICAgeCA9ICJGYW1pbHkgaW5jb21lLXRvLW5lZWRzIHJhdGlvIgogICkKCmdnc2F2ZSgKICAifi9EZXNrdG9wL0VMUy9pbmNvbWVfVEJNL2luY29tZV9UQk1fc3luYy9wbG90cy9wb3NfbG9uZ2l0dWRpbmFsX2FnZW1hdGNoLnBuZyIsCiAgaGVpZ2h0ID0gMTEsCiAgd2lkdGggPSAxMwopCmBgYA==